-----------------------------------------------------------------------------
-- 读取本地表工具,已经修改为通过lua table的方式读取表格内容
-- 以kay-value的形式读取lua table,在cpu:i5-4590的设备上的性能为读取1亿次需要0.25秒左右
-----------------------------------------------------------------------------

---@class TableTools
local this = {}
local tableDatas = {}

---@type TableCfg
TableCfg = require('LuaData.TableCfg')

---根据ID获取一行数据
local function GetRow(self, id) return self.Data[id] end

---选择全部数据
local function SelectAll(self) return self.Data end

--- 获取列索引
local function GetVariables(self) return self.Variable end

---初始化表
local function Init(configTable, func)
    if(type(func) ~= "function")then
        func = nil
    end

    local mt = {
        __var = configTable.Variable,

        __index = function(t, k)
            local temp = getmetatable(t)
            return rawget(t, temp.__var[k])
        end,

        __newindex = function(t, k, v)
            if t[k] ~= nil then
                error("已有字段无法更改!")
            else
                rawset(t, k, v)
            end
        end
    }

    for k, v in pairs(configTable.Data) do
        setmetatable(v, mt)
        if func then func(v) end
    end
end

---初始化表格数据
local function InitTable(configTable, func)
    configTable.GetRow = GetRow
    configTable.SelectAll = SelectAll
    configTable.GetVariables = GetVariables

    Init(configTable, func)
    local configMT = {
        __newindex = function() error("配置表为只读文件") end
    }
    setmetatable(configTable, configMT)
end

---初始化表格数据
function this.Init()
    for key, value in pairs(TableCfg) do
        local tempCfg = require('LuaData.' .. value)

        tableDatas[value] = tempCfg
        InitTable(tempCfg)
    end
end

--- 获取表格数据
function this.GetData(tableName, key)
    local tempCfg = tableDatas[tableName]
    if(not tempCfg)then return nil end
    return GetRow(tempCfg, key)
end

this.Init()
return this